Published on

COSMOS 生产环境部署流程

Authors

配置文件

节点二进制文件都在 ~/.xxxd/config 里面。

app.toml

控制Appliaction层的配置,grpc端口等,应用层开发主要改这个。

config.toml

cometBFT层配置,只开发module应用层,基本不用动这个。里面包含p2p端口配置,ABCIQuery端口配置。

直接与共识层打交道,就需要看这个配置文件,例如直接向cometBFT提交交易,查询等等。

生产部署流程

  • simd 是测试链的可执行程序
  • denom 代币的最小面额,来源于denomination这个单词
  • validator PoS共识下的矿工,负责签名打包区块

以Atom为例,最小面额单位是uatom,代表百万分之一的atom,如果是natom则代表十亿分之一。denom定义的是不可拆分的最小单位,也就是说,转账最小的单位是1 uatom。

成为validator 需要 10,000,000 个denom单位的代币,这个数量是硬编码在程序里的。所以确保最小面额设置得合适,能满足这个要求。

1. build编译

官网: https://tutorials.cosmos.network/tutorials/9-path-to-prod/2-software.html

官方介绍了多种编译方式,选择常用的go build即可。需要考虑二进制程序所运行的平台,编译可执行文件到目标cpu架构与操作系统平台。 例如:

GOOS=windows GOARCH=arm go build -o node

编译到cpu为arm,的windows操作系统平台。

2. 配置验证人节点

官网:https://tutorials.cosmos.network/tutorials/9-path-to-prod/3-keys.html

验证人节点负责对块签名并出块,需要能够访问私钥。

如果私钥可以被验证人节点直接访问,当验证人节点被攻击后,私钥可能泄露,并一直对恶意块进行签名。

如果验证人是通过签名服务对块进行签名,那么只要停掉签名服务,即可暂停攻击。

密钥生成

Consensus Key 共识密钥

在运行 simd init 时会生成一个测试密钥在~/.simapp/config/priva_validator_key.json,如果在生产环境,这个密钥则不够安全。如果非要使用这个密钥,则将它导入到KMS(密钥管理服务)后,再删除这个文件。

App Key 应用程序密钥

通过simd keys 进行设置

3. 创世配置

simd init test-1 --chain-id demo --default-denom mini 创建一条id为demo,代币为mini的测试链 。

test-1 为链的名字,后面最好跟一个数字,应分叉后,可以递增该数字进行区分。

当执行simd start启动一条链时,需要配置:

  • Token Name(原生代币名字) 可以在init的时候 通过 --default-denom 指定,也可以编辑创世文件,默认为stake

  • Genesis Accounts (创世账户) 预分配账户,一般来说是在主网上线前购买了token的用户。通过add-genesis-account 命令添加。有多个账户添加需要做collect(聚合)。

地址会有一个前缀,在app/app_config.go中定义, 默认为cosmos

  • Validator(验证者)

创世配置在~/.simd/config/genesis.json,可以参考CosmosHub的说明https://hub.cosmos.network/main/resources/genesis.html

链在启动前,一般有多个验证者,每个验证者需要给他们分配account_number账户编号,还有初始代币数量。通过邮件,或者别的链下方式通知。

例如验证者Alice在自己的电脑上运行:

./myprojectd gentx cavedweller1nw793j9xvdzl2uc9ly8fas5tcfwfetercpdfqq \
    3000000000stone \
    --account-number 0 --sequence 0 \
    --chain-id stone-age \
    --pubkey '{"@type":"/cosmos.crypto.ed25519.PubKey","key":"byefX/uKpgTsyrcAZKrmYYoFiXG0tmTOOaJFziO3D+E="}' \
    --gas 1000000 \
    --gas-prices 0.1nstone \
    --keyring-backend os

生成的配置在~/.myprojectd/config/gentx/目录中。

收集其他所有验证者生成的gentx,并将它们放入~/.myprojectd/config/gentx/中。如果有的验证者没有及时发送gentx过来,只要收集够足够的validator即可开始集合交易,启动网络。

剩下的验证者可以自己将交易发送到已启动的网络,成为验证者。

集合交易:

./myprojectd collect-gentxs

4. 启动

创世块启动时,Parties(参与者们)需要访问同一份genesis.json的创世文件,创世文件包含初始的代币分配,validator等信息,与各参与方的利益息息相关。

需要这些参与方都认可这份创世文件,并启动节点,那么这条链才算成功启动,并生成创世块。

只有创世块是通过社交达成共识,其他块都是通过PoS达成共识。社交共识即链下共识,分发genesis.json创世文件的过程,相当于分发合同,各参与方确认无误后,再运行节点,启动网络。

验证者与节点运营者,需要将创世文件放入自己电脑目录~/.myprojectd/config/genesis.json,然后启动节点程序。

发起交易

  • 直接使用gosdk发起

https://github.com/leonz789/cosmossdk-tx-demo/tree/main https://github.com/Reecepbcups/cosmos-submit-tx-client

  • 使用comJS发起

  • CLI

  • CURL jsonRPC